package com.zeng.sboot.oss.obj;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;

import java.io.*;
import java.net.URL;

import static com.zeng.sboot.oss.common.AccessKey.*;

public class UploadDemo {

    private String bucketName = "fapd-industrial-engineering-department";
    // <yourObjectName>表示上传文件到OSS时需要指定包含文件后缀在内的完整路径，不能以/开头，例如 abc/efg/123.jpg
    private String objectName = "sss";

    /**
     * 简单上传
     * 简单上传指的是使用OSS API中的PutObject方法上传单个文件（Object），本文主要介绍通过Java SDK进行简单上传。
     * 简单上传分为流式上传和文件上传。流式上传使用InputStream作为文件的数据源。文件上传使用本地文件作为OSS文件的数据源。
     */
    public void test1() {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 创建PutObjectRequest对象。
        String content = "Hello OSS";
        // <yourObjectName>表示上传文件到OSS时需要指定包含文件后缀在内的完整路径，例如 abc/efg/123.jpg。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName + "/test.txt", new ByteArrayInputStream(content.getBytes()));

        // 如果需要上传时设置存储类型与访问权限，请参考以下示例代码。
        // ObjectMetadata metadata = new ObjectMetadata();
        // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        // metadata.setObjectAcl(CannedAccessControlList.Private);
        // putObjectRequest.setMetadata(metadata);

        // 上传字符串。
        ossClient.putObject(putObjectRequest);

        // 关闭OSSClient。
        ossClient.shutdown();
    }
    // 上传Byte数组
    public void test2() {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
        // 上传Byte数组。
        byte[] content = "Hello OSS".getBytes();
        ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content));
        // 关闭OSSClient。
        ossClient.shutdown();
    }
    // 上传网络流
    public void test3() {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 上传网络流。
        InputStream inputStream = null;
        try {
            inputStream = new URL("https://www.aliyun.com/").openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ossClient.putObject(bucketName, objectName + "/test.txt", inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();
    }
    // 上传文件流
    public void test4() {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 上传文件流。
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream("<yourlocalFile>");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        ossClient.putObject("<yourBucketName>", "<yourObjectName>", inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();
    }
    // 上传本地文件
    public void test5() {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 创建PutObjectRequest对象。
        PutObjectRequest putObjectRequest = new PutObjectRequest("<yourBucketName>", "<yourObjectName>", new File("<yourLocalFile>"));
        // 如果需要上传时设置存储类型与访问权限，请参考以下示例代码。
        // ObjectMetadata metadata = new ObjectMetadata();
        // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        // metadata.setObjectAcl(CannedAccessControlList.Private);
        // putObjectRequest.setMetadata(metadata);

        // 上传文件。
        ossClient.putObject(putObjectRequest);
        // 关闭OSSClient。
        ossClient.shutdown();
    }



    public static void main(String[] args) {
        UploadDemo demo = new UploadDemo();

        demo.test3();
    }
}
